function insertSort (array) {
    const { length } = array
    for (let i = 1, temp = 0; i < length; i++) {
      let j = i
      temp = array[i]
      while (j > 0 && (array[j - 1] > temp)) {
        array[j] = array[j - 1]
        j--
      }
      array[j] = temp
    }
    return array
}

const arr = insertSort([3, 5, 1, 4, 2])
console.log(arr) // [1, 2, 3, 4, 5]


// 代码分析：
// 数组第一项3默认已被排序，所以我们从数组第二项(i = 1)值为5开始，因为3比5小，所以5待在原位，此时3和5已被排序。
// 下一个待排序的值为1，因为1比5小，所以5应该被移动到第三个位置，又因为1比3小，所以3被移动到第二个位置。
// 下一个待排序的值为4，因为4比5小，所以5应该被移动到第四个位置，又因为3比4小，所以4待在原位置不动。
// 下一个待排序的值为2，因为2比5小，所以5应该被移动到第五个位置，又因为2比4小，所以4被移动到第四个位置，又因为2比3小，所以3被移动到第三个位置，1比2小，所以2的位置不动。至此，数组已排序完毕。